package com.example.work.euums;

import org.apache.commons.lang3.StringUtils;

/**
 * 设备分类枚举
 * 根据表格内容定义设备分类及其编码
 */
public enum DeviceCategory {

    VIRTUAL_MACHINE("虚拟机", "01", "0801"),

    // 网络产品/存储设备 -> 存储设备(0105)
    STORAGE_DEVICE("网络产品/存储设备", "存储设备", "0105"),
    
    // 电信设备/其他电信设备 -> 其他电信设备(0399)
    OTHER_TELECOMMUNICATION_EQUIPMENT("电信设备/其他电信设备", "其他电信设备", "0399"),
    
    // 基础软件/操作系统 -> 操作系统(0701)
    OPERATING_SYSTEM("基础软件/操作系统", "操作系统", "0701"),
    
    // 基础软件/其他基础软件 -> 其他基础软件(0799)
    OTHER_BASIC_SOFTWARE("基础软件/其他基础软件", "其他基础软件", "0799"),


    ANTI_DDOS_ATTACK_PRODUCT("抗DDOS攻击产品", "抗DDOS攻击产品", "0207"),
    APPLICATION_SOFTWARE("应用软件/其他应用软件（含自研和第三方开放）", "应用软件/其他应用软件（含自研和第三方开放）", "0699"),
    APPLICATION_SOFTWARE_TWO("其他应用软件（含自研和第三方开放）", "应用软件/其他应用软件（含自研和第三方开放）", "0699"),
    BASTION_HOST("堡垒机", "堡垒机", "0223");


    private final String categoryPath;  // 分类路径（如"网络产品/存储设备"）
    private final String name;          // 设备名称（如"存储设备"）
    private final String code;          // 设备编码（如"0105"）

    DeviceCategory(String categoryPath, String name, String code) {
        this.categoryPath = categoryPath;
        this.name = name;
        this.code = code;
    }

    // 获取分类路径
    public String getCategoryPath() {
        return categoryPath;
    }

    // 获取设备名称
    public String getName() {
        return name;
    }

    // 获取设备编码
    public String getCode() {
        return code;
    }

    // 根据编码查找枚举
    public static DeviceCategory fromCode(String code) {
        for (DeviceCategory category : values()) {
            if (category.code.equals(code)) {
                return category;
            }
        }
        throw new IllegalArgumentException("无效的设备编码: " + code);
    }

    // 根据名称查找枚举
    public static DeviceCategory fromCategoryPath(String categoryPath) {
        if (StringUtils.isEmpty(categoryPath)){
            return null;
        }
        for (DeviceCategory category : values()) {
            if (category.categoryPath.equals(categoryPath)) {
                return category;
            }
        }
        return null;
    }

    @Override
    public String toString() {
        return String.format("%s (%s)", name, code);
    }
}